﻿class com.pbking.util.Proxy {

  public static function create(oTarget:Object, fFunction:Function):Function 
  {

    var aParameters:Array = new Array();
    
    for(var i:Number = 2; i < arguments.length; i++) 
    {
      aParameters[i - 2] = arguments[i];
    }

    var fProxy:Function = function():Object 
    {
	    if(arguments[0] == null && arguments.length == 1)
	    {
		    var aActualParameters:Array = new Array().concat(aParameters);
	    }
	    else
	    {
		    var aActualParameters:Array = arguments.concat(aParameters);
	    }
	    
		aActualParameters.push(arguments.callee);
		return fFunction.apply(oTarget, aActualParameters);
    };

    return fProxy;

  }

}